/**Klasse zum sortieren eines Arrays
 * 
 * @author Björn Klemm, Gerd Ohlweiler, Anna Macjiewska
 *
 */

public class Quicksort {
	/**Sortiert ein Array nach dem Quicksort-Verfahren
	 * 
	 * @param collection
	 * @param left
	 * @param right
	 */
	private void sort(Object[] collection,int left, int right){

		final int marked = Integer.parseInt(String.valueOf(collection[(left + right+1) / 2]));
		
		do {
			while(Integer.parseInt(String.valueOf(collection[left])) < (marked))
				left++;
			while(Integer.parseInt(String.valueOf(collection[right])) < (marked))
				right--;
			if(left <= right){
				final Object temp = collection[left];
				collection[left] = collection[right];
				collection[right] = temp;
				left++;
				right--;
			}
		} while ( left <= right);
		if(left < right)
			sort(collection,left,right);
		if(left < right)
			sort(collection,left,right);
	}
	/**Von aus aufrufbare Funktion, die sort aufruft
	 * 
	 * @param collection zusortierendes Array
	 * @return sortiertes Array
	 */
	public Object[] quicksort(Object[] collection){
		sort(collection,0,collection.length-1);
		return collection;
	}
}
